/**
 * Date.js
 * 常用日期函数、
 * @author HLonlin <1021944439@qq.com>
 */
const date = {
  /**
   * 获取num天前/后的毫秒级时间戳 num为正可以获得未来的时间，num为负可以获得过去时间
   * @param {number} num - num为正可以获得未来的时间，num为负可以获得过去时间
   */
  getCurrentTime: function (num) {
    let Dater = new Date()
    num = arguments[0] ? arguments[0] : 0
    return Dater.getTime() + num * 24 * 60 * 60 * 1000
  },
  /**
   * 获取当前日期并默认以“/”字符连接
   * @param {string} split - 连接符
   */
  getCurrentDate: function (split) {
    let Dater = new Date()
    split = arguments[0] ? arguments[0] : '/'
    let currentDate =
      Dater.getFullYear() + split + Dater.getMonth() + split + Dater.getDate()
    return currentDate
  },
  /**
   * 根据unit获取当前时间戳 h截止时、m截止分、s截止秒、ms截止毫秒
   * @param {string} unit - 规定返回单位的级别
   */
  getTimeStamp: function (unit) {
    let Dater = new Date()
    let dateFn = ''
    switch (unit) {
      case 'h':
        dateFn = (
          new Date(
            Dater.getFullYear() +
              '/' +
              Dater.getMonth() +
              '/' +
              Dater.getDate() +
              ' ' +
              Dater.getHours() +
              ':00'
          ).getTime() / 1000
        )
        break
      case 'm':
        dateFn = (
          new Date(
            Dater.getFullYear() +
              '/' +
              Dater.getMonth() +
              '/' +
              Dater.getDate() +
              ' ' +
              Dater.getHours() +
              ':' +
              Dater.getMinutes()
          ).getTime() / 1000
        )
        break
      case 's':
        dateFn = Math.round(Dater / 1000)
        break
      case 'ms':
        dateFn = Dater.getTime()
        break
      default:
        dateFn = Dater.getTime()
    }
    return dateFn
  },
  /**
   * 日期格式转换
   * dateFormat(new Date(1534406070125),'yyyy-MM-dd hh:mm:ss.S')
   * @param {Object} time Date object
   * @param {String} fmt 'yyyy-MM-dd hh:mm:ss.S'
   * @returns
   */
  dateFormat: (time, fmt) => {
    var o = {
      'M+': time.getMonth() + 1, // 月份
      'd+': time.getDate(), // 日
      'h+': time.getHours(), // 小时
      'm+': time.getMinutes(), // 分
      's+': time.getSeconds(), // 秒
      'q+': Math.floor((time.getMonth() + 3) / 3), // 季度
      S: time.getMilliseconds() // 毫秒
    }
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        (time.getFullYear() + '').substr(4 - RegExp.$1.length)
      )
    }
    for (var k in o) {
      if (new RegExp('(' + k + ')').test(fmt)) {
        fmt = fmt.replace(
          RegExp.$1,
          RegExp.$1.length === 1
            ? o[k]
            : ('00' + o[k]).substr(('' + o[k]).length)
        )
      }
    }
    return fmt
  },
  /**
   * 使用数组
   * @returns {string} '今天星期几'
   */
  getWeekDate: function () {
    let weekStr = '今天星期'
    let date = new Date().getDay()
    let dateArr = ['天', '一', '二', '三', '四', '五', '六']
    return weekStr + dateArr[date]
  },
  /**
   *  使用对象
   * @returns {string} '今天星期几'
   */
  returnWeekDate: function () {
    let string = '今天是星期'
    let date = new Date().getDay()
    // 使用对象
    const dateObj = {
      0: '天',
      1: '一',
      2: '二',
      3: '三',
      4: '四',
      5: '五',
      6: '六'
    }
    return string + dateObj[date]
  },
  /**
   * charAt 定位方法
   * @returns {string} '今天星期几'
   */
  returnWeekDay: function () {
    return '今天是星期' + '日一二三四五六'.charAt(new Date().getDay())
  },
  /**
   * 获取某月月末
   * @param {number} 年份
   * @param {number} 月份
   * @returns {number} '月末'
   */
  getTheEndOfTheMonth: function (
    year = new Date().getFullYear(),
    month = new Date().getMonth() + 1
  ) {
    return new Date(year, month, 0).getDate()
  }
}
export default date